package com.guan.trend;

import cn.hutool.core.convert.Convert;
import cn.hutool.core.util.NetUtil;
import cn.hutool.core.util.NumberUtil;
import cn.hutool.core.util.StrUtil;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;

/**
 * @ClassName ThirdPartIndexDataApplication
 * @Author GuanCary
 * @Date 2020/4/18 18:16
 * @Version 1.0
 **/
@SpringBootApplication
//注册到注册中心服务注解
@EnableEurekaClient
public class ThirdPartIndexDataApplication {
    public static void main(String[] args) {
        // 端口声明,端口也可以写在yml配置文件里方便修改
        int port = 8090;
        int eurekaServerPort = 8761;
        //eureka端口未启动报错日志的实现
        //如果端口可用则代表这个端口没有被使用,eureka没启用
        if (NetUtil.isUsableLocalPort(eurekaServerPort)) {
            System.err.printf("检查到端口%d 未启用，判断 eureka 服务器没有启动，本服务无法使用，故退出%n", eurekaServerPort);
            System.exit(1);
        }
        //这一段就表示启动的时候如果带了参数，如： port=8099, 那么程序就会使用 8099 作为端口号了。 这样做的好处是，什么代码都不用改，只需要在启动的时候带不同的参数，就可以启动不同的端口了。
        // 防止NPE的写法,这里的意思是如果args不为null且长度不为0(不是空字符串),遍历arg,输出日志port=端口号,这个端口号是传入的参数
        if (null != args && 0 != args.length) {
            for (String arg : args) {
                if (arg.startsWith("port=")) {
                    String strPort = StrUtil.subAfter(arg, "port=", true);
                    if (NumberUtil.isNumber(strPort)) {
                        port = Convert.toInt(strPort);
                    }
                }
            }
        }
        //如果端口不可用会返回false,加上!输出端口日志
        if (!NetUtil.isUsableLocalPort(port)) {
            System.err.printf("端口%d被占用了，无法启动%n", port);
            System.exit(1);
        }
        new SpringApplicationBuilder(ThirdPartIndexDataApplication.class).properties("server.port=" + port).run(args);

    }

}